終於來到最後一篇了,我們前面寫了這麼多程式跟測試,那要什麼時候執行測試?
理論上,你隨時都應該做。特別是 merge branch 回 develop 的時候。但是人總是偷懶的,而且如果測試越來越多,即使每個都只花幾秒,跑完可能也要10幾分鐘了,人生有限,不要浪費在等待上。所以我們可以善用一些自動化工具。
基本上大家應該都會使用 Github,就算是私人架設的也有 Gitlab,它們都有類似的功能可以寫腳本來執行一些命令。就讓我們來用 Github 的 Action 來在每次 push develop 時觸發測試。
由於 Airflow 跟 Flink 是不同語言,我建議是分兩個 git 庫來存放。
確保將這個 YAML 檔案放在你的專案的 .github/workflows
目錄下,並將其命名為任何你喜歡的名稱(例如 pytest.yml
)。當你 push 到 develop
分支時,GitHub Actions 會自動運行這個測試工作流程。
name: Run pytest on Push to develop
on:
push:
branches:
- develop
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8 # 目前 Airflow 2.7.1 版支援的最低 Python 版本
- name: Install dependencies
run: pip install -r requirements.txt # 如果你有 requirements.txt 檔案的話
- name: Run pytest
run: pytest
在 Flink 這邊,我們可以多做一點事。因為 Java 需要 package 出一個 jar 檔,所以我們除了測試之外,當我們 push 回 master 並下 tag 時,再呼叫 package 來打包出我們要的 jar 檔
name: Java Build and Release
on:
push:
branches:
- develop
push:
tags:
- '*'
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v2
with:
java-version: '11' # 選擇你的 Java 版本,例如 8、11、16 等
- name: Build with Maven
run: mvn clean package
- name: Upload JAR to Release
if: startsWith(github.ref, 'refs/tags/')
run: |
RELEASE_TAG="${GITHUB_REF/refs\/tags\//}"
echo "Creating a release for tag $RELEASE_TAG"
# Create a GitHub release using the jar file
gh release create "$RELEASE_TAG" target/your-java-project.jar
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
這個 GitHub Actions workflow 包含以下步驟:
pom.xml
)。gh
) 工具來建立 Release。確保將這個 YAML 檔案放在你的 Java 專案的 .github/workflows
目錄下,並將其命名為任何你喜歡的名稱(例如 java-build-and-release.yml
)。當你 push 到 develop
分支時,或者當你創建一個 tag 時,GitHub Actions 會執行相應的工作流程。
在這次的鐵人賽中,我挑選了一個相當龐大的主題,因此有許多細節我無法深入探討,也無法提供更多實際範例。同時,在撰寫的過程中,我也意識到了自己知識的一些不足之處。
幸運的是,現在有了 ChatGPT,它在快速生成草稿後,再經過一些個人風格的修飾,幫助我輕鬆完成文章並發佈。否則,有好幾次我都陷入了困境。
我希望透過我的文章,讀者能夠更深入地了解 Airflow 和 Flink 的寫作方式和應用。雖然工具的熟練使用非常重要,但我們也應該注意不要過度依賴單一工具,而要多接觸不同的知識和工具,這樣我們的工作能夠更加得心應手。